
//  受查异常       //判断什么异常 关注继承什么异常的类
class MyException extends Exception {
    public MyException(){
        super();
    }//默认的构造方法
    public MyException(String message){
        super(message);
    }
}
//  非受查异常
class MyException2 extends RuntimeException {

}
public class TestDemo3 {

//    如果一段代码可能抛出 受查异常, 那么必须显式进行处理.
//    1.   使用 try catch 包裹起来
    public static void func1(int x){
        try {
            if (x == 0){
                throw new MyException();
            }
        }catch (MyException e){
            e.printStackTrace();
        }
    }
//    打印结果
//    MyException
//    at TestDemo3.func1(TestDemo3.java:22)
//    at TestDemo3.main(TestDemo3.java:52)
    //          调用有参数的构造方法
    public static void func2(int x){
        try {
            if (x == 0){
                throw new MyException("heihei");
            }
        }catch (MyException e){
            e.printStackTrace();
        }
    }
//      打印结果：
//      MyException: heihei
//      at TestDemo3.func2(TestDemo3.java:36)
//      at TestDemo3.main(TestDemo3.java:58)
//    2.     在方法上加上异常说明, 相当于将处理动作交给上级调用者
    public static void func3(int x) throws MyException{
        if (x == 0){
            throw new MyException();//如果想给参数 得进行MyException2的构造
        }
    }
//      打印结果：
//      Exception in thread "main" MyException
//      at TestDemo3.func3(TestDemo3.java:49)
//      at TestDemo3.main(TestDemo3.java:62)

//          调用有参数的构造方法
    public static void func4(int x) throws MyException{
        if (x == 0){
            throw new MyException("hello");
        }
    }
//    打印结果：
//    Exception in thread "main" MyException: hello
//    at TestDemo3.func4(TestDemo3.java:60)
//    at TestDemo3.main(TestDemo3.java:68)

    public static void main(String[] args) throws MyException {
//        func1(0);
//        func2(0);
//        func3(0);//main 后需要声明throws MyException  不然会报红
        func4(0);
    }







}
